package admin

import (
	"github.com/gin-gonic/gin"
	"go-ecommerce/internal/service"
	"go-ecommerce/internal/utils"
	"go-ecommerce/internal/validate"
	"gorm.io/gorm"
	"strconv"
)

func CreateRoleHandler(db *gorm.DB) gin.HandlerFunc {
	return func(c *gin.Context) {
		var req validate.CreateRoleRequest
		if err := c.ShouldBindJSON(&req); err != nil {
			utils.Error(c, 401, "参数错误")
			return
		}

		if err := service.CreateRole(db, req.Name); err != nil {
			utils.Error(c, 401, "添加角色失败")
			return
		}
		utils.Success(c, "添加成功！")

	}
}

func UpdateRoleHandler(db *gorm.DB) gin.HandlerFunc {
	return func(c *gin.Context) {
		idStr := c.Param("id")
		id, _ := strconv.ParseUint(idStr, 10, 64)
		var req validate.UpdateRoleRequest
		if err := c.ShouldBindJSON(&req); err != nil {
			utils.Error(c, 401, "参数错误")
			return
		}
		if err := service.UpdateRole(db, id, req.Name, req.Description); err != nil {
			utils.Error(c, 401, err.Error())
			return
		}
		utils.Success(c, "更新成功！")
	}
}

// 获取角色详情
func GetRoleHandler(db *gorm.DB) gin.HandlerFunc {
	return func(c *gin.Context) {
		idStr := c.Param("id")
		id, err := strconv.ParseUint(idStr, 10, 64)
		if err != nil {
			utils.Error(c, 401, err.Error())
		}
		role, err := service.GetRole(db, id)
		if err != nil {
			utils.Error(c, 401, err.Error())
		}
		utils.Success(c, "ok", role)

	}
}

// 删除角色
func DeleteRoleHandler(db *gorm.DB) gin.HandlerFunc {
	return func(c *gin.Context) {
		idStr := c.Param("id")

		id, err := strconv.ParseUint(idStr, 10, 64)
		if err != nil {
			utils.Error(c, 401, err.Error())
			return
		}
		if err := service.DeleteRole(db, id); err != nil {
			utils.Error(c, 401, err.Error())
			return
		}
		utils.Success(c, "删除成功")
	}
}

// 获取全部角色
func GetAllRoleHandler(db *gorm.DB) gin.HandlerFunc {
	return func(c *gin.Context) {
		role, err := service.GetAllRole(db)
		if err != nil {
			utils.Error(c, 401, err.Error())
		}
		utils.Success(c, "ok", role)
	}
}
